/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.Calificacion;
import co.com.sed.model.util.Util;

/**
 * @author Mejia
 *
 */
public class CalificacionPeer {

	private static final String BUSCAR_CALIFICACIONES =
		"SELECT id_calificacion, cualitativa, cuantitativa, descripcion FROM calificacion ";

	private static final String BUSCAR_CALIFICACION  =	
		"SELECT id_calificacion, cualitativa, cuantitativa, descripcion FROM calificacion "+
		"WHERE id_calificacion = &id_calificacion";

	private static final String INSERTAR_CALIFICACION  =
		"INSERT INTO calificacion(cualitativa, cuantitativa, descripcion ) VALUES "+
		"('&cualitativa', &cuantitativa, '&descripcion')";

	private static final String ACTUALIZAR_CALIFICACION =
		"UPDATE calificacion "+
		"SET cualitativa = '&cualitativa', cuantitativa = &cuantitativa, descripcion = '&descripcion' "+
		"WHERE id_calificacion = &id_calificacion";

	private static final String ELIMINAR_CALIFICACION =
		"DELETE FROM calificacion "+
		"WHERE id_calificacion = &id_calificacion";

	
	
	/** busca en la base de datos todos los registros de la tabla "calificacion"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de calificaciones
	* @see         				Calificacion, Statement
	*/
	public static ArrayList<Calificacion> buscartodasCalificacion(Statement stmt) {
		ArrayList<Calificacion> calificaciones = new ArrayList<Calificacion>();

		String sql = BUSCAR_CALIFICACIONES; //"SELECT id_calificacion, cualitativa, cuantitativa, descripcion FROM calificacion ";

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Calificacion cal = new Calificacion();

					cal.setIdCalificacion(rs.getInt("id_calificacion"));
					cal.setCualitativa(rs.getString("cualitativa"));
					cal.setCuantitativa(rs.getFloat("cuantitativa"));
					cal.setDescripcion(rs.getString("descripcion"));
					
					calificaciones.add(cal);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return calificaciones;
	}
	
	/** busca en la base de datos un registro de la tabla "calificacion"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* @param idCalificacion		    id de la calificacion que se desea cosultar
	* 
	* @return					calificacion buscada
	* @see         				Calificacion, Statement
	*/
	public static Calificacion buscarCalificacion(Statement stmt, int idCalificacion) {
		Calificacion calificacion = new Calificacion();

		String sql = BUSCAR_CALIFICACION;
		//"SELECT id_calificacion, cualitativa, cuantitativa, descripcion FROM calificacion "+
		//"WHERE id_calificacion = &id_calificacion";
		
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_calificacion", String.valueOf(idCalificacion));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					calificacion.setIdCalificacion(rs.getInt("id_calificacion"));
					calificacion.setCualitativa(rs.getString("cualitativa"));
					calificacion.setCuantitativa(rs.getFloat("cuantitativa"));
					calificacion.setDescripcion(rs.getString("descripcion"));					
					
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}

		return calificacion;
	}
	
	
	
	/** Inserta una Calificacion en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param calificacion		calificacion que se va a insertar en la base de datos
	 *  
	 * @return					id del nuevo registro
	 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static int insertarCalificacion(Statement stmt, Calificacion calificacion) throws SQLException {
		int idNuevaCalificacion = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_CALIFICACION;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql = sql.replaceAll("&cualitativa", calificacion.getCualitativa())
					 .replaceAll("&cuantitativa", "" + calificacion.getCuantitativa())
					 .replaceAll("&descripcion", calificacion.getDescripcion());
			
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaCalificacion = rs.getInt("id_calificacion");
				Util.print("nuevo registro: " + idNuevaCalificacion);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaCalificacion;
	}

	/** Actualiza una calificacion en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param calificacion			calificacion que se va a actualizar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static void actualizarCalificacion(Statement stmt, Calificacion calificacion) throws SQLException {
		String sql = ACTUALIZAR_CALIFICACION;
		 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion
		sql = sql.replaceAll("&id_calificacion", "" + calificacion.getIdCalificacion())
				 .replaceAll("&cualitativa", calificacion.getCualitativa())
				 .replaceAll("&cuantitativa", "" + calificacion.getCuantitativa())
				 .replaceAll("&descripcion", calificacion.getDescripcion());
		stmt.executeUpdate(sql);
	}
	
	/**
	 *  Elimina una Calificacion en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param Calificacion		Calificacion que se va a eliminar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	
	public static void eliminarCalificacion(Statement stmt, Calificacion calificacion) throws SQLException {
		String sql = ELIMINAR_CALIFICACION;
		// se setean los "id_calificacion = &id_calificacion";
		sql = sql.replaceAll("&id_calificacion", "" + calificacion.getIdCalificacion());

		stmt.executeUpdate(sql);
	}
	
}
